export interface TableColumn {
  /** 列标题 */
  label: string;
  /** 字段名 */
  prop?: string;
  /** 列宽度 */
  width?: string | number;
  /** 最小宽度 */
  minWidth?: string | number;
  /** 是否固定列 */
  fixed?: boolean | "left" | "right";
  /** 对齐方式 */
  align?: "left" | "center" | "right";
  /** 是否可排序 */
  sortable?: boolean | "custom";
  /** 自定义渲染函数 */
  render?: (row: any, column: any, cellValue: any, index: number) => any;
  /** 插槽名称 */
  slot?: string;
  /** 格式化函数 */
  formatter?: (row: any, column: any, cellValue: any, index: number) => string;
  /** 是否显示 */
  show?: boolean;
  /** 列的其他属性 */
  [key: string]: any;
}

export interface PaginationConfig {
  /** 当前页码 */
  currentPage: number;
  /** 每页条数 */
  pageSize: number;
  /** 总条目数 */
  total: number;
  /** 每页显示个数选择器的选项设置 */
  pageSizes?: number[];
  /** 组件布局，子组件名用逗号分隔 */
  layout?: string;
  /** 是否为分页按钮添加背景色 */
  background?: boolean;
  /** 是否使用小型分页样式 */
  small?: boolean;
}

export type SelectionType = "single" | "multiple" | "none";

export interface DynamicTableProps {
  /** 表格数据 */
  data: any[];
  /** 表格列配置 */
  columns: TableColumn[];
  /** 是否显示加载状态 */
  loading?: boolean;
  /** 表格高度 */
  height?: string | number;
  /** 表格最大高度 */
  maxHeight?: string | number;
  /** 是否显示边框 */
  border?: boolean;
  /** 是否显示斑马纹 */
  stripe?: boolean;
  /** 表格尺寸 */
  size?: "large" | "default" | "small";
  /** 选择类型 */
  selectionType?: SelectionType;
  /** 行唯一标识字段名 */
  rowKey?: string;
  /** 分页配置 */
  pagination?: PaginationConfig;
  /** 是否显示分页 */
  showPagination?: boolean;
  /** 表格头部工具栏标题 */
  title?: string;
  /** 是否显示工具栏 */
  showToolbar?: boolean;
  /** 表格样式类名 */
  tableClass?: string;
  /** 表格其他属性 */
  tableProps?: Record<string, any>;
}

export interface DynamicTableInstance {
  /** 清空选中 */
  clearSelection: () => void;
  /** 设置全选 */
  toggleAllSelection: () => void;
  /** 设置某一行的选中状态 */
  toggleRowSelection: (row: any, selected?: boolean) => void;
  /** 获取选中的行数据 */
  getSelectionRows: () => any[];
  /** 表格实例 */
  getTableRef: () => any;
}
